package com.example.algorithm.String;

// 本案例演示的是字符串回文判断。
public class PalindromeChecker {
    public static boolean isPalindrome(String str) {
        // 将字符串转换为小写，并去除空格和标点符号
        str = str.toLowerCase().replaceAll("[^a-z0-9]", "");

        // 定义左右指针，分别指向字符串的开头和结尾
        int left = 0, right = str.length() - 1;

        // 循环直到左右指针相遇
        while (left < right) {
            // 如果左右指针所指字符不相同，则不是回文
            if (str.charAt(left) != str.charAt(right)) {
                return false;
            }
            // 移动左右指针
            left++;
            right--;
        }
        // 如果循环结束仍未发现不同，则是回文
        return true;
    }

    public static void main(String[] args) {
        // 测试示例
        String str1 = "level";
        String str2 = "radar";
        String str3 = "A man, a plan, a canal, Panama!";

        System.out.println(str1 + " is palindrome? " + isPalindrome(str1));
        System.out.println(str2 + " is palindrome? " + isPalindrome(str2));
        System.out.println(str3 + " is palindrome? " + isPalindrome(str3));
    }
}

